package de.fhl.model;

/**
 * Ueberschrift:  OnlineWahl
 * Copyright:     Copyright (c) 2010 
 * Organisation:  FH Luebeck - Virtuelle FH
 */

import java.net.*;
import java.io.*;

import de.fhl.subWaehlerVerzeichnis.SocketServer;

/** Client der ueber Sockets mit einem Server kommuniziert<br>
 * 
 * @author Achim Krumrein (krumreia@stud.fh-luebeck.de)
 * @author Thomas Weber (webertho@googlemail.de)
 * @version 1.0
 */

public class SocketClient {

	/**
	 * Methodenname: startServer
	 * Beschreibung: Methode startet den Server
	 */	
	public boolean startServer (){
		
		// Server starten
		try {
			SocketServer server = new SocketServer();
		} catch (IOException e) {
			System.out.print(e);
			return false;
		}
		return true;
	}

	/**
	 * Methodenname: stopServer
	 * Beschreibung: Methode fordert den Server auf sich zu beenden
	 */	
	public boolean stopServer () throws IOException{
		
		// Server beenden
		// Socket Verbindung aufbauen und eine 0 an den Server schicken 
		
		// Verbindung zum Server herstellen
		Socket serverSocket = new Socket ("localhost",1234);
	  	
	 	PrintWriter output =
	 	    new PrintWriter(
	 	        new OutputStreamWriter(
	 	 	    serverSocket.getOutputStream()));
		
		// Uebermittlung von Daten zum Server
		output.write(0);
		
		// Ausgabepuffer leeren
		output.flush();
		
		// Verbindung zum Server beenden
		serverSocket.close();
		
		// Ausgabestrom schliessen
		output.close();

		return true;
	}
	
	public String sendAndRecieve (int zahl1, String Name, String AusweisNr, String LoginID) throws IOException {
		
		// Verbindung zum Server herstellen
		Socket serverSocket = new Socket ("localhost",1234);
	  	BufferedReader input = 
	 	    new BufferedReader(
	 	 	new InputStreamReader(
	 		    serverSocket.getInputStream()));
	  	
	 	PrintWriter output =
	 	    new PrintWriter(
	 	        new OutputStreamWriter(
	 	 	    serverSocket.getOutputStream()));
		
		// Uebermittlung von Daten zum Server
		output.write(zahl1);
		output.write(Name);
		output.write(AusweisNr);
		output.write(LoginID);
		
		// Ausgabepuffer leeren
		output.flush();
		
		String rueckgabe = input.readLine();
		
		// Verbindung zum Server beenden
		serverSocket.close();
		
		// Eingabe und Ausgabestrom schliessen
		input.close();
		output.close();
		
		return rueckgabe;
	}

	/**
	 * Methodenname: sendState
	 * Beschreibung: Methode schickt eine Statusänderung an das Subsystem<br> 
	 * @param Name
	 * @param Status
	 */
	public boolean sendState (String Name, String Status) throws IOException {
		
		// Übergibt dem Subsystem Wahllisten den aktuellen Status -> im Moment noch nicht implementiert
		
		return true;
	}

	/**
	 * Methodenname: vergleicheUser
	 * Beschreibung: Methode schickt eine Anfrage an das Subsystem, welches den Waehler verifiziert
	 * @param Name
	 * @param AusweisNr
	 * @param LoginID
	 */
	public String[] vergleicheUser (String Name, String AusweisNr, String LoginID){
				
		// TODO
		// Server und Client kommunizieren im Moment nicht miteinander, aus diesem Grund werden im Moment Beispielhaft Werte zurück gegeben
				
		String[] Rueckgabe = { null, null, null }; 
		
		String Status = "Berechtigt"; //null;
		String Wahlkreis = "31"; //null;
		
		// mit dem Client eine Nachricht schicken
//		try {
//			SocketClient client = new SocketClient();
//			System.out.println(client.sendAndRecieve(1, Name, AusweisNr, LoginID));
//		} catch (IOException e) {
//			System.out.print("Socket Verbindung meldet: "+ e +"\nlaeuft der Server?\n\n");
//			return false;
//		}
		
		// Beispielhaft gesetzt
		Rueckgabe[0] = Name;
		Rueckgabe[1] = Status;
		Rueckgabe[2] = Wahlkreis;
		
		return Rueckgabe; 
	}	
	

	
	
	
}
